package com.company;

import com.utils.MapData;
import com.utils.FileUtilsForLinkList;
import com.utils.Map;
import com.utils.MyLinkList;

import java.io.IOException;
import java.util.Scanner;

public class LinkCRUD {

    /**
     * 链表读文件
     * @return
     * @throws IOException
     */
    public MyLinkList linkReadFile() throws IOException {
        FileUtilsForLinkList fufl = new FileUtilsForLinkList();
        fufl.readFile("src\\com\\data\\ORDER_SAVE.txt");

        MyLinkList maps = fufl.readFile("src\\com\\data\\ORDER_SAVE.txt");

        return maps;
    }

    /**
     * 链表打印读出的文件
     * @throws IOException
     */
    public void linkReadFileToString() throws IOException {

        MapData.MyLinked = linkReadFile();

        MapData.MyLinked.toString();
        System.out.println("链表读取文件成功！！");
        System.out.println("总共"+ MapData.MyLinked.getSize() + "条！！");
    }

    /**
     * 链表插入道路信息！！
     * @throws IOException
     */
    public void linkInsert() throws IOException {
        System.out.println("链表插入道路信息！！");

//        LinkReadFile lrf = new LinkReadFile();
//        MyLinkList maps = lrf.linkReadFile();

//        MapData.MyLinked = linkReadFile();

        System.out.println("请分别输入道路信息中的：linkID、roadnameflag、branch、dispclass、roadname");

        //    #linkID=55410;roadnameflag=0;branch=0;dispclass=13;roadname=
        Map insertMap = new Map();
        System.out.print("请输入LinkId:");
        Scanner sc = new Scanner(System.in);
        int linkID = sc.nextInt();
        insertMap.setLinkID(linkID);
        System.out.print("请输入roadnameflag：");
        int roadnameflag = sc.nextInt();
        insertMap.setRoadnameflag(roadnameflag);
        System.out.print("请输入branch：");
        int branch = sc.nextInt();
        insertMap.setBranch(branch);
        System.out.print("请输入dispclass：");
        int dispclass = sc.nextInt();
        insertMap.setDispclass(dispclass);
        System.out.print("请输入roadname：");
        String roadname = sc.next();
        insertMap.setRoadname(roadname);

        MapData.MyLinked.addLast(insertMap);

        MapData.MyLinked.toString();
        System.out.println("插入成功！！！");
    }

    /**
     * 链表查询道路信息！！
     * @throws IOException
     */
    public void linkSerch() throws IOException {

//        LinkReadFile lrf = new LinkReadFile();
//        MyLinkList maps = lrf.linkReadFile();
//
//        MapData.MyLinked = linkReadFile();

        System.out.println("链表查询道路信息！！");
        System.out.print("请输入需要查询的LinkID:");
        Scanner sc = new Scanner(System.in);
        int linkID = sc.nextInt();
        int index = MapData.MyLinked.indexOf_ID(linkID);
        System.out.println("查询成功：" +  MapData.MyLinked.getMap(index-1).toString() );
    }


    /**
     * 根据linkID 修改链表修改道路信息
     * @throws IOException
     */
    public void linkUpdate() throws IOException {
        System.out.println("根据linkID 修改链表修改道路信息");

//        LinkReadFile lrf = new LinkReadFile();
//        MyLinkList maps = lrf.linkReadFile();
//
//        MapData.MyLinked = linkReadFile();

        System.out.println("请分别输入道路信息中的：linkID");

        //    #linkID=55410;roadnameflag=0;branch=0;dispclass=13;roadname=
        Map updateMap = new Map();
        System.out.print("请输入LinkId:");
        Scanner sc = new Scanner(System.in);
        int linkID = sc.nextInt();
        updateMap.setLinkID(linkID);

        int index = MapData.MyLinked.indexOf_ID(linkID);

        Map map = MapData.MyLinked.getMap(index-1);
        System.out.println("查找到该LinkID对应的数据 " + map.toString());

        System.out.println("请分别输入道路信息中的：roadnameflag、branch、dispclass、roadname");
        System.out.print("请输入roadnameflag：");
        int roadnameflag = sc.nextInt();
        updateMap.setRoadnameflag(roadnameflag);
        System.out.print("请输入branch：");
        int branch = sc.nextInt();
        updateMap.setBranch(branch);
        System.out.print("请输入dispclass：");
        int dispclass = sc.nextInt();
        updateMap.setDispclass(dispclass);
        System.out.print("请输入roadname：");
        String roadname = sc.next();
        updateMap.setRoadname(roadname);

        MapData.MyLinked.updateBackMap(index,updateMap);
        System.out.println("修改该道路信息成功：" + MapData.MyLinked.updateBackMap(index,updateMap));

        MapData.MyLinked.toString();
        System.out.println("修改成功！！！");

    }

    /**
     * 根据LinkedID删除结点
     */
    public void linkedDelete() throws IOException {

        System.out.println("根据linkID 删除链表道路信息");

//        MapData.MyLinked = linkReadFile();

        System.out.println("请分别输入道路信息中的：linkID");

        System.out.print("请输入LinkId:");
        Scanner sc = new Scanner(System.in);
        int linkID = sc.nextInt();

        int index = MapData.MyLinked.indexOf_ID(linkID);

        //根据索引位置删除结点。。
        MapData.MyLinked.delete(index-1);

        MapData.MyLinked.toString();
        System.out.println("删除成功！！！");

    }


}
